/*!
 * \details Classe para conexão em Bancos de Dados
 * \author Alcione Ferreira\n
 * \since 09/11/2009\n
 * \date 19/04/2012\n
 * \version 2.0.0\n
 * \copyright GNU Public License.
 */

#include <configbpg.h>
//PostgreSQL
#include <libpq-fe.h>

using namespace std;

#ifndef __BANCOPG_H__
#define __BANCOPG_H__ 1

/**
 * \class BANCOPG
 * \brief Classe de Conexão com banco de dados PostgreSQL
 */
class BANCOPG
	{
  	public:
    	/** Construtor da Classe BANCOPG */
    	BANCOPG(const char *);
		/** Destrutor da Classe BANCOPG */
    	~BANCOPG();
    	bool conectado;/**<Atributo que indica se a conexão está ativa ou inativa*/
    	int query_result;/**<Atributo que indica o tipo da consulta:\n 1 - DELETE,DROP,CREATE,UPDATE e INSERT sem retorno\n 2 - SELECT e INSERT com retorno\n 3 - Falha*/
		int tipo;/**<Atributo que especifica o tipo de SGBD (obsoleto).*/
    	int registros;/**<Atributo que armazena a quantidade de registros de uma consulta com retorno.*/
		vector<vector<string> > resultados; /**<Atributo que armazena os resultados de uma consulta SQL com retorno.*/
		int colunas;/**<Atributo que armazena a quantidade de colunas de uma consulta com retorno.*/
		vector<string> nome_colunas;/**<Atributo que armazena o nome das colunas retornadas de uma consulta SQL com retorno.*/
    	string mensagem;/**<String de informação das mensagem do sistema.*/
		/** Método utilizado para fazer uma consulta SQL na base de dados. */	 
    	void executar(char *);
		/** Método utilizado para recuperar os dados de uma consulta com retorno. */
    	const char *resultado(int, int);
		/** Método utilizado para recuperar os dados de uma consluta com retorno e gravar no vector BANCOPG::resultados.*/
		void resultado();
		/** Método utilizado para iniciar a conexão com o banco de dados.*/
		void conectar();
		ifstream conf;/**<Atributo utilizado para abrir o arquivo de configuração.*/
		string conf_file;/**<Atributo utilizado para guardar o caminho do arquivo de configuração.*/
    	string host;/**<Atributo utilizado para armazenar o hostname da base de dados*/
    	string banco;/**<Atributo utilizado para armazenar o banco da base de dados*/
    	string user;/**<Atributo utilizado para armazenar o usuario da base de dados*/
    	string senha;/**<Atributo utilizado para armazenar a senha da base de dados*/

  	private:
    	PGconn *conn;/**<Atributo utilizado para guardar o link com a base de dados*/
    	PGresult *result;/**<Atributo utilizado para receber o resultado de consultas com retorno.*/
	
 	};

#endif // __BANCOPG_H__
